关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 7584|回复: 5
打印 上一主题 下一主题

关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构+ U: L5 q1 w, x, e. V9 f* z/ d

! Z& @! D( E( A1 z0 z8 k# i    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256+ X. S4 T4 S! h2 m8 ?

! S( @: u) n3 ], m9 X: H( s$ T其他程序段。。。。。
0 F" y9 F+ R3 _
5 N3 ~2 w- |( T   free(x_d);
4 n: @# T) B. S  i7 B
! R1 j" x' U6 i- v( @使用DSP侧单独调试功能,验证动态申请没有问题,
+ v; e5 Q; a+ c% g
7 b! f- p9 z; b  d. R( k( v3 y$ @但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
' r8 `) v- {& ~! x- I& e

3 O# Y1 i: a7 {1 K3 G+ H2 Y2 A4 c% f- I

  @! \# Y; R# V; w3 C) R. f- k+ w, l& B
; m5 F9 b" k+ k) t" Z  o$ P

0 b. B4 B% q+ O( F. f: d* o! H5 M0 w8 B$ _4 w" X4 t

; T9 \$ y/ t' Z. o/ y+ N3 [
+ M! g1 A0 v3 \1 h8 b: l) z* p+ b: o. z7 F+ ^: D3 w
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
6#
发表于 2015-10-31 20:55:50 来自手机 | 只看该作者
这个问题,我再测试一下,过两天实测后给你答复!
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */8 L) P7 A% k( W" ~# F: T8 G4 E
Program.heap = 0;5 ]6 q6 U. ^1 C
Program.argSize = 100;  /* minimum size */# m' i# }2 |6 h6 P
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */( ?2 a+ }2 y  d6 T; m
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');- a) ]( ?; Z" k- N2 }) l; m
var heapMemParams = new HeapMem.Params();# D3 S. I% m0 t! D
heapMemParams.size = 0x4000;
. h/ ^5 w1 _+ m3 C" ?5 i2 b3 m& Z3 H6 X, D& F7 r3 Q; j
var Memory = xdc.useModule('xdc.runtime.Memory');0 A' C# {7 ^1 w; E
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
( [. ^, c7 W) k2 N5 j
# S  [6 ~" F9 w我大约calloc  每次共计大小为5K*16bits,
/ ?. {2 G+ S) u5 w" ~7 c' U而默认配置才0x4000、需要改大。
/ ~3 d& f# p4 S* C- ]: s( N- J% l2 ]4 w% f: ]& y
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
7 U* H5 V0 K, Y7 n  b- w3 P我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下1 x% I. [( J9 M. ^! _/ j" v
(不过疑惑的是,为何单独DSP仿真就没有问题呢?), w/ z  `3 k+ k/ p
* v3 _8 C2 N' j1 }% m& h
是不是需要在DSP.CFG中进行配置) y7 \/ q" R* d# l0 R- \  O) \" r  A
我现在的配置为9 u( b- A3 ~* B( r/ R9 q% E

  n7 ]7 y  M( I  e3 Z3 Y/*! t( |% W) ~0 v8 C) |
*  ======== Operating System Configuration ========5 |' {8 j/ c* P! k; S# y# y- e) o
*/* r/ P/ |- Y* A( S

; i5 C4 K- \: a$ c" U3 C% M+ E/* no rts heap */9 \* f3 q1 c8 \) a) \
Program.heap = 0;
- G7 \1 q, \, UProgram.argSize = 100;  /* minimum size */% Q( ~+ A, c- `5 _) L  Q
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
3 E  m% b2 t' P, j* A: D/ `" U4 ]0 I( ]: Q
/* create a default heap */
0 h, _8 l. L7 @7 h9 Dvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');/ k/ e: g) |$ u+ E1 v5 D
var heapMemParams = new HeapMem.Params();
4 o& A7 B) Y+ pheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大' Q6 C2 \( V7 W6 V1 a0 P
4 Q' ?* I3 k! A
var Memory = xdc.useModule('xdc.runtime.Memory');6 E& E0 w3 N! J' P
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
8 Q" {/ [: D% l2 T, U' {. _0 J2 |* r5 Q' x
/* configure System module */) Q- q8 W" J- P5 }6 |% b  k
var SysMin = xdc.useModule('xdc.runtime.SysMin');  H* _: a$ T# l: E
SysMin.bufSize = 0x1000;
+ z. n2 ]  C8 z: m3 `SysMin.flushAtExit = false;4 }' \  T$ E: O

. e8 d0 f) v( {5 C, W" s. n0 Y; f6 Rvar System = xdc.useModule('xdc.runtime.System');
# w4 e- o& A! tSystem.SupportProxy = SysMin;
/ u$ X6 `6 }. d( r3 a; o
3 U& q! e$ T0 ?/ x6 [- I; X/* configure SysBios to use the lower half of Timer 1 */' I, o8 ~% r3 J9 ]# {5 D
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
! E) ]/ s( `- ^! O+ d3 cvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
8 v: q0 \. H2 h3 ^" BTimer.timerSettings[1].master = true;, D1 N( e, H- ?" b* R7 S( m
Timer.defaultHalf = Timer.Half_LOWER;
: o- y, [3 \6 p% \4 ~; `* MClock.timerId = 1;
9 p) }6 k. w0 b9 d& _/ f4 U2 f( F2 V# N
3 ]+ W- b# [' C' K! E8 j+ T, t
/*
; P+ V5 P; U: [/ y *  ======== Miscellaneous Configuration ========; f  O0 w- S$ H9 j6 K
*/
6 T+ _6 G- U9 ~7 `2 {' h7 U2 c' L. i/ }* d
/* set default diags mask */+ n3 d1 Y3 m8 [* ~# i2 C
var Diags = xdc.useModule('xdc.runtime.Diags');
- P7 R' p7 K* z( c. ]. }5 S8 ovar Defaults = xdc.useModule('xdc.runtime.Defaults');
, [& p% u6 R' [! {9 i$ W9 {  H( H2 d2 o7 O: Q2 v
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
, W9 U, ^* p% a/ v( Q: UDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;8 ?  k" a, r: @" g
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
! U$ n( ~& Z& CDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
' A% J& w. Y: _6 oDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
/ a' x! R5 C/ @Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
' }( N2 t1 Y5 ^0 `3 _# SDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
6 ~5 m* G9 r5 Z" Y+ BDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
$ F& E# E* c6 J! i8 J/ h: f$ TDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;: I! }! e7 J: w) t/ k9 t1 g
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;; y4 G7 U# D1 q' G
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
2 Q+ Z( O9 \' ~# b1 i* W6 ]Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
8 C  b" l5 d8 V5 u6 HDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
9 X3 l+ z2 P2 K3 T8 P. `5 r1 a) Q$ ODefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
3 T: l1 y& a- q: F' k  h5 Y5 b7 f. G0 g* P
/* override diags mask for selected modules */' [, [- H( ^  A0 L! [* K+ K
xdc.useModule('xdc.runtime.Main');  |5 p7 t4 g4 `& y# I; O, q9 `
Diags.setMaskMeta(
/ O; l' I7 o' e    "xdc.runtime.Main",
' V. q! e" L  [8 I; q    Diags.ENTRY | Diags.EXIT | Diags.INFO,& {) G4 A$ i" a  r2 P& v1 c
    Diags.RUNTIME_ON0 Z& z7 |% p3 C0 V
);5 _6 E) I* a6 E  y2 E1 p

: r. j0 H/ f& W" ]7 b+ }var Registry = xdc.useModule('xdc.runtime.Registry');
& F3 h7 h' R+ h+ W% x' dRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
/ E& |( e1 o" ^: o6 rRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
' J& u8 D) q. f  g8 t& ^* z0 TRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;. n- n1 B8 A# h4 C
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;! u& o$ a& w1 w9 E$ E6 l
$ L% p5 }4 N; C5 ^2 V
/* create a logger instance */. D& e4 x( D' P7 [4 _
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
" \- T7 i# x. k. b( uvar loggerBufP = new LoggerBuf.Params();* h9 Q- F: U/ k0 V& z* l6 G+ j
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
- W; o$ e% D& P  |1 WloggerBufP.bufType = LoggerBuf.BufType_FIXED;
! N# |3 L- {5 l7 J; B& Y5 L3 Z  {8 G+ x9 Q4 V
var appLogger = LoggerBuf.create(loggerBufP);
( r, v. x# }# sappLogger.instance.name = "AppLog_Core1";1 J0 S3 \5 L$ ^0 \& Z
Defaults.common$.logger = appLogger;' u8 }4 r% |1 U( W# \$ y" i/ v. h, w
Memory.defaultHeapSize = 0x8192;   
0 c; n2 A7 Z" w1 Q0 iIdle.idleFxns[0] = "&LEDStatus";
& O% R" v- D; Y3 \+ n/ u0 B8 P2 GCache.initSize.l2Size = Cache.L2Size_32K;
' c7 p3 g: j* c) |& P2 ^
' m2 K  B0 p4 k" q  c
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

点击跳转“创龙科技服务通”

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2026-2-7 07:26 , Processed in 0.041643 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表