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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
7 n+ z8 w% t1 X" g' N& ~5 ?! X+ a
/ B( |9 t  x* A$ a    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
. R; X1 X: m- S/ i3 K( A/ E# E$ n2 k
其他程序段。。。。。
7 T: h  x# O1 v/ E 1 \* A2 S# P% b7 J8 t% L6 D
   free(x_d);
7 Z) J7 |2 d5 X) M/ [# ?8 W& T7 I9 {8 P  W; i
使用DSP侧单独调试功能,验证动态申请没有问题,
& p5 \! _3 w& `
0 b4 G7 G, F/ r# \但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
1 a/ h" O; `* E; k2 \( C
# h  i% j! |* C

, L7 d" b7 Y; q; s, B$ W" D- O/ G( c) C) p6 l- W2 ~9 k+ t

  g2 k. V9 b' t# B! d
7 b6 T* t* R$ `$ m' [7 j6 f, }9 R4 X- \$ k- K
5 K0 o6 m2 U% M" T" P" m& H( D

* ?% o& d4 l$ e6 R& N4 e6 K
4 @0 g* ~2 A( W* u' {
$ P* M- m! j- j5 k6 O- Q( p
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明2 j4 @$ Q: }" ?
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
8 {5 M# E- w* m& X1 {(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
9 K0 ?  ~3 m0 b5 Q3 m$ w: G
) }) j( F# ~4 z
是不是需要在DSP.CFG中进行配置
  `4 L1 c! K; H9 s8 F1 S0 C7 G$ @. W3 U我现在的配置为( Y+ F3 g9 |% [

" t+ s% Q# ^" N0 ^) a/*+ x3 O' j, M; Q  E: M- x& B) _
*  ======== Operating System Configuration ========9 F9 N7 K; f! r
*/
: A% r6 u" M+ [$ J7 q) s
* ^* p# g( m; b' {+ h7 h# J/* no rts heap */
  W2 u' ~0 j& |* i/ {- a5 P5 qProgram.heap = 0;% N$ C7 O5 b* ]
Program.argSize = 100;  /* minimum size */
9 J  _0 b5 |6 Z/ {* AProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大- C2 i( `  ]/ J: @6 w, I) |! g
2 R1 o1 F8 ?" N& F7 N
/* create a default heap */
' I% F6 w+ t! f8 y7 o# m& @* O; A0 |var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
0 j1 C5 @4 M0 x* lvar heapMemParams = new HeapMem.Params();
) b/ s0 b. [# x' Y+ w3 n$ C& IheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大" K. i5 i' \! P7 V0 m
) K) `5 G3 C9 Z& K' ]# b/ g6 ]* V
var Memory = xdc.useModule('xdc.runtime.Memory');& V+ r; ^9 I* U: y9 A
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);& u. M3 a+ Z2 D1 L

, M2 U* F8 y5 g9 u$ |/* configure System module */7 O$ l6 h: T9 e
var SysMin = xdc.useModule('xdc.runtime.SysMin');) {) O8 a. ?) f
SysMin.bufSize = 0x1000;
: e" z0 _% @# N8 ?& D7 K! jSysMin.flushAtExit = false;
  h4 c# l7 R  r( \( N$ o9 G' |" V4 b4 R. K( c
var System = xdc.useModule('xdc.runtime.System');
$ Y4 [; t( T9 B- l8 g5 t0 CSystem.SupportProxy = SysMin;
2 `# C% j& f. \: V6 r  R
8 I* y; C7 W" H' X1 q/* configure SysBios to use the lower half of Timer 1 */0 O, o- s; e' D% f9 s8 Y
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');8 U# B: @0 ^% q2 b4 ^: b/ A
var Clock = xdc.useModule('ti.sysbios.knl.Clock');0 X5 R( p5 l8 T% |3 z) A
Timer.timerSettings[1].master = true;4 N8 C. N# k* i% F3 T- l. {
Timer.defaultHalf = Timer.Half_LOWER;/ ?9 i" \0 w% @- \/ K
Clock.timerId = 1;8 j8 C% c; H, l3 C4 d
) w* Q. K3 T) [/ f) p: I# n* A! K2 W
* g: _6 @* g8 G8 N) t# q
/*% \: W6 v0 [" ~3 o& o0 v/ p& n0 W8 Z
*  ======== Miscellaneous Configuration ========% W( n& w$ ~: v3 `. D  H
*/
. K  I) N7 E! E  a* @: O6 J* O
/* set default diags mask */! j+ w' H) Q, F/ T! m: m7 R
var Diags = xdc.useModule('xdc.runtime.Diags');/ v! P7 [; @$ u* o8 d$ C
var Defaults = xdc.useModule('xdc.runtime.Defaults');
% D  {# |! [' }! k. ?5 S+ F; _  ]3 D* ^
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;# {  n  J+ l( T* e6 |: I' S+ S
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
3 c3 v$ Q, S6 n% U5 V, T9 hDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
# c5 B# f9 O$ p6 l. [Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
1 ~, e! I7 z* d3 G0 E6 y' c5 mDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */( Q1 M# d" W7 `; ^' o
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;( H. B' w6 R' _, ?6 p
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
) H6 g( j( }1 u! V3 l, W# {Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
6 h+ G3 ?" `. U1 aDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;0 r2 Y" j' K9 D5 [, }
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
7 L% h* X! a! N1 [Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;. G  T, T- ]5 ]& o5 m
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
4 a) Q% Z# d/ ~/ X. q9 ?Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;2 B; y0 r8 A0 n+ A8 |: l
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
- W: k; }+ F( o2 h/ |- r6 L7 Y: i" y  u$ p" c- }/ B
/* override diags mask for selected modules */2 b9 o. O( l6 w9 y& g
xdc.useModule('xdc.runtime.Main');* r4 @+ {: S: X2 I/ T7 f
Diags.setMaskMeta(4 q+ C% Y* L  L  I! G
    "xdc.runtime.Main",
, G( g- S8 [1 ^; O( }    Diags.ENTRY | Diags.EXIT | Diags.INFO,
' @2 E  M- ^$ t0 C. O; u+ M9 k0 T    Diags.RUNTIME_ON
* X$ D0 f: }/ h5 r8 M& H);
$ d7 o! x0 ?! L$ H+ E2 B1 Q+ ~+ g' @+ B4 I
var Registry = xdc.useModule('xdc.runtime.Registry');  T% w, I3 L: X( h
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;* Y) \. w; K) [
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
6 P& v9 ]* O/ u1 ^4 \) \Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
0 K  b5 j- R' m; w( G7 rRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
1 P9 }, c' G3 W/ S( ~" n1 e
* E; Z' ~5 n- l2 z0 Z/* create a logger instance */
. _* y, }( b; P9 Y6 Ivar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');& y+ X) h! }4 |0 h% Z
var loggerBufP = new LoggerBuf.Params();
- L8 O5 ~2 P5 ^# ologgerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
* I, r1 m1 ?0 z1 ]5 aloggerBufP.bufType = LoggerBuf.BufType_FIXED;
1 k1 k( X2 o: \! e4 q3 k; h9 B, u1 M+ `1 N
var appLogger = LoggerBuf.create(loggerBufP);
* L. H  j) O: t& n" P- SappLogger.instance.name = "AppLog_Core1";: W, U6 A( t7 m
Defaults.common$.logger = appLogger;
2 g6 {3 m6 u! z$ M0 }* I& w: nMemory.defaultHeapSize = 0x8192;    ( h% A: S; v7 Z. x; Z" `6 E
Idle.idleFxns[0] = "&LEDStatus";  d2 q  D" h9 L& N; l
Cache.initSize.l2Size = Cache.L2Size_32K;  d  ]; o& i- l  W% S$ P# t, a- L
+ l7 q- b7 r; u* Q- X
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */  r3 h* G3 P/ H7 F1 i6 @
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');4 ~" }- ^/ Y; i2 N
var heapMemParams = new HeapMem.Params();! Q+ a7 l8 N% Z; c4 c! G
heapMemParams.size = 0x4000;
* Z. C1 Q: h$ V, R6 a( [$ k6 D% I# l' u5 q" b( m% g& D  {
var Memory = xdc.useModule('xdc.runtime.Memory');
! V+ O% D" S% ~" c1 |% I, \2 J  I: SMemory.defaultHeapInstance = HeapMem.create(heapMemParams);: r# K5 z1 L9 K; B

" V5 c7 e# w  U1 l) e我大约calloc  每次共计大小为5K*16bits,  B+ s; F" P, W8 R& E  Y
而默认配置才0x4000、需要改大。
6 o+ _1 z/ `' T3 C9 u' S
/ L5 Y/ v3 c1 y' j# }+ ^( M0 I2 }
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
* g2 c% L4 H) ?! LProgram.heap = 0;
! r/ [1 Q, E: |. JProgram.argSize = 100;  /* minimum size */
4 s; s0 G- v+ s8 y% LProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-26 00:56 , Processed in 0.045858 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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