关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构" @/ _! @9 I- h! ]8 R; D+ x9 b0 ?

, p, V- F* M* o; P    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
* M  |* V! S* C; N$ z; |( H% Q: G$ {8 c+ e. o* ^5 g
其他程序段。。。。。! G6 B$ {# k/ V* O. G3 r, H
& Z! H8 V+ j: k8 g
   free(x_d);
% i  q) W9 ^% Q% P- p9 |* t6 X" r, N6 }
使用DSP侧单独调试功能,验证动态申请没有问题,
& a) J$ i: _, h- h2 n4 d* J7 {) W, _8 ]3 n, r- L8 e
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。- ~3 H* N: r) Z2 X+ D; n

6 Y  \0 J/ m0 o8 S; n
  u0 @0 ^3 u2 L& S  X- z* V9 e) c% n$ z: ?

8 n* u2 X4 {$ J4 @3 h# a9 v1 j: w$ e* L" m: p
0 C& `# Y7 f: L, F, U# i; W

6 x0 z* s- s7 [) M4 s/ i0 W" G% k
+ o& _1 D5 H: ^! y  P8 {
5 L; [4 b8 u0 Q- Q. e) p
$ z/ ]$ E; _6 p' ]- G
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
, `& k0 P9 l% I6 O( J4 F& H我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
/ l4 k+ b/ h: T* N8 d(不过疑惑的是,为何单独DSP仿真就没有问题呢?), u" y7 r( j  _
+ D1 o% s( Z0 ?
是不是需要在DSP.CFG中进行配置2 x: ~* W0 U  o6 A& W5 G
我现在的配置为: {9 v/ W; E- m0 u

8 t0 l, f! j$ j# d/*! W( ~# P2 J2 q+ P  y
*  ======== Operating System Configuration ========* t, C% a" ?3 U( V9 }
*/
3 D+ J% k! Z, J+ ?  \+ A! y* E2 O2 N1 ~4 `" r
/* no rts heap */
: o  Z: b" @; `) \1 g1 ~* kProgram.heap = 0;( x. L  ]# H  h
Program.argSize = 100;  /* minimum size */
9 Y0 n" m1 k! A7 l6 r/ I0 KProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
7 c7 Z! G7 Y* q9 R. ^$ J0 n" R4 i4 D$ Y% a: B) o# S
/* create a default heap */- l/ \8 l1 R" y9 y4 D8 k: \" H7 e$ w
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');: a+ O0 i2 ~5 i9 R
var heapMemParams = new HeapMem.Params();
8 z' n" F* @: K/ Q) H, ~, k; c0 UheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
- p2 j+ \! b. [; B
' }7 L* l$ J4 ^5 `% A
var Memory = xdc.useModule('xdc.runtime.Memory');8 i. S. E* o! K" V* Q
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
- {! x4 b" l4 [% R* f* y- x. _% v& s/ r' X  @) U& A+ o1 j
/* configure System module */
, D6 X' d' y% T. t0 r2 N, ?5 _var SysMin = xdc.useModule('xdc.runtime.SysMin');: I$ E+ M' X9 L' j$ M
SysMin.bufSize = 0x1000;
: P' p2 R1 D, D$ Z  E% |SysMin.flushAtExit = false;$ Q4 j9 P) {5 ~6 ~
# T. l* T  h# M# Y2 `
var System = xdc.useModule('xdc.runtime.System');
/ K; ~8 v7 v: [4 h* j! p% ~9 YSystem.SupportProxy = SysMin;: J9 J9 g2 U7 ^

$ L# U  Z: X, v) M( @/* configure SysBios to use the lower half of Timer 1 */$ ~! k  {, S- H8 G
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
  z/ m0 ~3 s  J3 y; I& O0 svar Clock = xdc.useModule('ti.sysbios.knl.Clock');
. {! [2 v; f0 d) D1 uTimer.timerSettings[1].master = true;
* X" V; h! Q- s1 F0 F+ d, Q: l! |Timer.defaultHalf = Timer.Half_LOWER;+ ?9 Q" e" r& c. m
Clock.timerId = 1;
( c8 A* R$ o' {. y3 j, A" n  V5 ~+ I" h6 B( v
. U8 Q) A# n" N; u7 K
/*! g9 U( Y( s$ J% p, {
*  ======== Miscellaneous Configuration ========
* q4 N5 p9 U# k7 }$ Q9 n */
- l8 G/ M' H# P1 q9 K! A! ]- e% k+ ]# x( m9 e  Y8 N' w' ^
/* set default diags mask */
4 m" Y9 X$ W4 Xvar Diags = xdc.useModule('xdc.runtime.Diags');0 f; C7 @1 e3 n& R0 c# }/ R4 v3 `
var Defaults = xdc.useModule('xdc.runtime.Defaults');
: {+ w9 u/ e7 d& g  q0 J7 D5 H; i& ^7 D$ N$ y, ^% t; b
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
; ^9 G9 l, g% j& nDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
  r0 a& K2 k2 ^7 i: LDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;0 U+ \+ N' P. y: |, v- E$ R3 r
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts *// s7 S4 f5 U9 b2 D2 v% i( W
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */  o5 g1 g- ?% \% s" k' ]
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;2 ?; W( G% F; K' ]; t
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;% J9 X& p0 Z9 O9 Q
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;, P+ O! p' H1 h
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
$ X- ~8 z" B: T- \/ FDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
2 V& q. _0 f" C9 L' u8 T' e& tDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
. y1 p& ]* \2 k$ E8 R: PDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
: S* Z' B0 m, Q# ODefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
7 N8 ?3 ?4 O2 m0 T' cDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
0 w) p+ d& x0 N; f( w7 {- R& n
+ Q' L* T6 B6 O% b0 h  ^) Z/* override diags mask for selected modules */% D: M5 N  q2 ?* S4 t
xdc.useModule('xdc.runtime.Main');
1 ?7 U5 F4 o2 [9 K' R0 EDiags.setMaskMeta(
9 g! z/ @3 ^; h    "xdc.runtime.Main",. Y/ ?7 O* J2 D, O6 U
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
2 j5 F. V1 e7 L' D+ J) u$ n    Diags.RUNTIME_ON
/ ]* p6 i- e7 c! `, n( V);. |8 w& n* y- j6 E$ y

& D4 J/ ]. Q* @3 {! L5 xvar Registry = xdc.useModule('xdc.runtime.Registry');
  N  ^' F3 i/ @/ e+ o- n/ H' oRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;- s6 T3 a8 B) `/ n. U! n
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
; o+ h- ^3 l$ w2 q7 o/ MRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;. m  W9 r. `% x/ b4 K- x
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;! ?6 ?  G9 U0 k8 F
. Q* T! o& F' k0 k" Y
/* create a logger instance */
: x) t3 m% r8 v( c' Tvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');+ O& v- G+ ?( p7 J
var loggerBufP = new LoggerBuf.Params();
8 W6 s1 Z1 s7 N3 vloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */+ }$ g% r% |" p  F8 c  d' J
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
' B4 {# P/ t6 z! ]6 Y6 i: w0 F9 l, X) T& C
var appLogger = LoggerBuf.create(loggerBufP);
9 @7 V; H' t9 XappLogger.instance.name = "AppLog_Core1";: [* R" I& p7 a; j% ]1 r2 o# b
Defaults.common$.logger = appLogger;
* {- A. q! h9 {5 W2 eMemory.defaultHeapSize = 0x8192;    * G. l: Y5 n2 o& f1 S
Idle.idleFxns[0] = "&LEDStatus";
6 d6 x- J5 l3 e" V+ bCache.initSize.l2Size = Cache.L2Size_32K;
( Y+ y3 J8 H2 q; O; [( J. W- n/ c
# E  A! ]2 {* w- k
回复 支持 反对

使用道具 举报

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 */2 F0 s6 w8 W! ]) Q, C& r: E
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
* w! R7 }* Q! D; N  E5 ~7 g5 Gvar heapMemParams = new HeapMem.Params();4 Q3 s/ y8 ]/ N+ J. [& U
heapMemParams.size = 0x4000;4 ^0 x% _2 a6 M4 S
$ T: D! D4 Y; J4 h6 q
var Memory = xdc.useModule('xdc.runtime.Memory');
3 l* g  H7 }$ {9 a$ y2 YMemory.defaultHeapInstance = HeapMem.create(heapMemParams);! [, B& c+ t  C( X

  E" v  E7 R; y我大约calloc  每次共计大小为5K*16bits,6 r" M+ w( \- W- Y2 q1 H
而默认配置才0x4000、需要改大。
2 ~1 h2 [. c& [( e- N+ n% w  c) a( U& N( B# [  y+ [% w
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */; D( D& @" Q' @+ V
Program.heap = 0;% F4 `. A/ k, a, r) ?* _) Z! W
Program.argSize = 100;  /* minimum size */
, z( E5 i1 g# S  O4 f* b. t& K5 MProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-6 01:50 , Processed in 0.044199 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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