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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构* a3 h9 Q% X, }* E$ Y

) b  I6 O# t5 C8 {$ Z    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
2 D" S+ N. Z% g6 T8 A! w& _9 r: ?4 N
其他程序段。。。。。) [' r0 p4 ?% Q* M% ^

! Q! h7 R0 A/ l! v% a) a/ d   free(x_d);
* I" }: `, P- v0 @2 Q
: V, m, A- p( q9 ^! t! h使用DSP侧单独调试功能,验证动态申请没有问题,
& C$ K1 d7 ^- n4 G4 o0 h9 e# \8 W/ \" h7 h& C3 a) Z
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
$ y0 j" W5 M, G9 A4 }- m! _1 O2 D* m

- ~8 R  j+ F( A: H1 ?9 v# E4 m
. z8 k' V* y1 n6 Z4 R% z, y- J1 U8 n$ C- S! c; Y- D. N3 c" y9 n* L
2 R9 n# M# @! A6 B
. V+ q9 G& I7 h0 h; x
1 _4 A7 }0 Z8 |7 v0 l7 f
) l8 y$ p+ c' A7 C5 e$ V
- Y: O3 Y' {8 ^5 ~6 R, t

7 z4 q0 Q  Z. ~& q0 K0 s2 |7 U' \9 z6 I$ ]& ^' O1 r
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明/ l( w8 T; e0 [) h+ t1 A7 ?
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下# t$ |4 O- r% y# v0 W6 `- @
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
8 A" d0 M8 h5 P

; ^7 Q4 s' `- V2 `是不是需要在DSP.CFG中进行配置
5 [& k9 j  L% d7 x. _我现在的配置为
. s7 E9 @4 r  J: ?+ W3 o$ j; U
( f( J# p! |# V! v$ _/*
2 i2 f4 o- S$ g, I/ h7 ^; ] *  ======== Operating System Configuration ========& Y5 k+ W. M- X/ g9 ^
*/; Y& ]& D, p$ K2 }
& d4 a  J# |  \7 b
/* no rts heap */
$ X9 N3 N" Y  K6 k7 p6 nProgram.heap = 0;, P! e" D8 p7 N$ ?
Program.argSize = 100;  /* minimum size */5 n- ]+ d7 y7 T1 a$ W
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大4 @8 u. b) `4 B8 k1 F  h2 v4 W
5 l9 z2 f& {: |4 V# e) x
/* create a default heap */2 e. g# ]8 e) @0 \1 ], s" D+ X
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');: x, c) _3 e3 T; j7 w
var heapMemParams = new HeapMem.Params();  w/ ^- \0 m. P. ?
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大, V% L  s! v+ T

" G3 L  X2 v; M, a
var Memory = xdc.useModule('xdc.runtime.Memory');
1 ?% g* a  s' V9 k- WMemory.defaultHeapInstance = HeapMem.create(heapMemParams);' N/ P0 }" r/ ]9 a/ Y" W! z! w
7 S  v4 C' \. o! M7 R
/* configure System module */9 q/ ^' {/ R. H' Z; c. @
var SysMin = xdc.useModule('xdc.runtime.SysMin');8 S5 \$ x; F9 s
SysMin.bufSize = 0x1000;
6 {, ]9 ?( p! ~; S. U7 U7 V, E7 HSysMin.flushAtExit = false;/ a4 y7 u# I. ^# v( g; o2 [

+ a$ n% a7 ^9 L0 U! G/ X. z# ^& }0 w/ wvar System = xdc.useModule('xdc.runtime.System');9 U# E5 {9 R1 ]2 [. O8 u! C
System.SupportProxy = SysMin;% G& h, }& F2 ?0 |$ h! P9 Z, t

9 R' E" ^, x& b/* configure SysBios to use the lower half of Timer 1 */
" M' k  e% g) C+ z$ t& Pvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');* H8 U/ V. L. P4 W* c! @
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
& p0 n1 [! g% T7 I0 T2 D. {( ?Timer.timerSettings[1].master = true;
. I) }9 E- u+ L( _6 @* @Timer.defaultHalf = Timer.Half_LOWER;. `$ ^' R6 m& G7 v0 A9 ~
Clock.timerId = 1;. n9 {7 L, r0 w$ `. d! q
2 I) P  S6 o' j1 e- g9 @3 Y; L
7 X, i6 n- _; E7 c- |% @$ a
/*
1 p3 B* G4 e* ?  u4 F8 | *  ======== Miscellaneous Configuration ========$ I9 Q; t+ I' y" i1 F( K
*/
0 S+ d- H+ ^8 W0 ?% a, L* U
7 o- n3 @- j7 S0 S6 X. b9 K2 e7 p+ [/* set default diags mask */
. ~5 j6 T/ C; j, X0 U4 Pvar Diags = xdc.useModule('xdc.runtime.Diags');( q2 S  N0 a& H2 }6 x. F% D
var Defaults = xdc.useModule('xdc.runtime.Defaults');$ X. }, X6 O& v* D
% h/ a5 Z1 @# P5 l/ {, q' Z
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;; ~! W/ u1 h, [) M5 C
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
6 f& v2 H& b# J( U7 `9 uDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;/ F7 h/ v1 e% x3 y6 L# c# P
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */* p7 n/ Y9 r  v, A
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
3 |' r- ?# m) Y6 M& \1 aDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;4 K9 l: |. d# |) a5 n2 s- b
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
# r* e2 \: M( v( }6 Q- O: |Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;- A; J0 v& s* a0 y8 k! t+ z, C- }. J8 a
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
' k* U- e& N( p$ W# T4 n  ODefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;. e  \' J# B$ \; o
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
2 F" U% C% m& U' vDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;* l- s! c$ Z! p6 `
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
  m; |4 y* f9 g- S0 K1 Q0 k  c& hDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;* V1 D5 G' G  X6 y- j' \( s6 H
' Z6 ?! _7 q# `; j
/* override diags mask for selected modules */
9 k4 G5 ~0 N/ Vxdc.useModule('xdc.runtime.Main');
9 ?- [- G' r0 x, vDiags.setMaskMeta(
0 `3 N0 r1 R6 ?    "xdc.runtime.Main",
0 l9 ?) t5 v: R8 }    Diags.ENTRY | Diags.EXIT | Diags.INFO,( k3 u. H8 @0 n% ^8 t
    Diags.RUNTIME_ON
3 Q' ]% ]* m5 e. W& m7 e2 `);
  T+ L, g8 J4 f) r! c; g  d0 ]8 K+ P" b4 R! }- ?* V" i
var Registry = xdc.useModule('xdc.runtime.Registry');
8 m* |) A1 u% X! _Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;- _1 O; X9 V# M9 c! U
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;/ D" H8 f1 O/ a7 C
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
! E* @* d" R- @$ w9 ]  ^Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;, w9 z# b1 D! z( ?
3 h, |& U, X- P- k" q
/* create a logger instance */
% `7 s9 C% \% h; o9 @) yvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');: g8 `( S0 F; F3 `
var loggerBufP = new LoggerBuf.Params();
5 N* N  S, B$ C* b- {loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */2 o2 b! k: ]* P# i' U
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
% H' b' @& l& i. g0 v3 `/ r( u2 X0 a5 T% {! e8 S) }- @5 f
var appLogger = LoggerBuf.create(loggerBufP);
) W2 {6 ?- G0 K, ?: U2 l$ P: BappLogger.instance.name = "AppLog_Core1";
' ]; N3 A1 M7 e6 y6 n! rDefaults.common$.logger = appLogger;
# R8 Q. B3 u" j7 c  }Memory.defaultHeapSize = 0x8192;   
3 x; X1 G6 k: bIdle.idleFxns[0] = "&LEDStatus";1 o5 S- J: _' x& v' `
Cache.initSize.l2Size = Cache.L2Size_32K;
3 z0 l: G, D* u% q
% z  R6 g6 T5 k# ^' v
回复 支持 反对

使用道具 举报

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 */
- a, ], E6 @1 c7 Ovar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');/ ]. x& o" y; w3 n$ y- f" l
var heapMemParams = new HeapMem.Params();
0 A+ O* `$ B3 T* J" k: C7 r' IheapMemParams.size = 0x4000;
# t+ C/ l5 M0 d/ g! ]8 c* p2 w$ q. e; U# ]4 \0 c
var Memory = xdc.useModule('xdc.runtime.Memory');: {5 r, @8 Z- f  _1 v) p& M4 K
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
) [8 H  x" Q! |  j* H
7 x, f  T. W, I2 `9 H我大约calloc  每次共计大小为5K*16bits,
3 r  e1 T$ f& z% D而默认配置才0x4000、需要改大。6 ^9 {* e# p* J8 N
' T. q4 k" X7 p" U9 _
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
* y2 y( Z- k+ }+ |' UProgram.heap = 0;  f& t* u$ X: p- y$ H
Program.argSize = 100;  /* minimum size */0 c# `" w5 I3 `3 n3 H( ~: w/ e9 ~
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-13 07:15 , Processed in 0.047642 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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