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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

) i2 i& `' }# c; k- h    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
9 r1 e0 }% ~5 l: t$ ^/ k. H) w  ?' t4 X9 E9 }
其他程序段。。。。。
* {. `- h3 S6 |, |& ` - Q- z! u; r7 E9 C3 _, c, f8 H' q5 u# E
   free(x_d);* C2 t' r, y0 K; w) q  ]6 @. r$ F
/ Z* o; h6 p: B$ Q0 j
使用DSP侧单独调试功能,验证动态申请没有问题,9 N) q$ R: n8 F8 V6 d+ s
- A- R: q8 [6 I+ v
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
5 P% B7 c) o- n3 z1 O$ y6 P" }

: {0 N) Z- e- p0 ?: z% M3 c# F) C0 H5 O" W1 @3 O+ y0 N9 ^' y
+ D9 q% z! T, D1 r! h

; {9 R% ]" s; E& k+ G& Z, `
4 z  h! r! @. O! T7 G8 L1 Z0 y
" M8 x: @$ _- g" ~3 M
. v. i) M) t, |3 w9 W' J: m6 \5 B" Y# v6 x# s& L7 P3 p9 w" S

# d% D; \, P  m  w$ t% J2 B- |
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
$ s6 [7 a. o- T- D- G$ E3 v我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下" W) X/ Q: D9 r9 f# P* g& z2 r1 }
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)2 C* f2 g- ~- c# _0 m1 R) s
6 S) S! M8 l: j$ z
是不是需要在DSP.CFG中进行配置
% Q- m! j8 W4 ?; @. ?2 v7 r我现在的配置为; M) }/ z* i4 S' [
" R& I# Y# p) F. ?
/*, m$ I4 j( x" B  Y: I  b
*  ======== Operating System Configuration ========2 Y1 k7 x$ a7 M/ Z& X/ g/ v
*/% m$ c2 o1 X! H1 r5 I: {/ B8 N

& d8 Z. B, @2 ^. {3 |/* no rts heap */6 m" L7 e# s3 N# u9 I$ ~
Program.heap = 0;% W/ m4 h' `+ P9 K, v
Program.argSize = 100;  /* minimum size */
* b# _4 A7 `* w( M. O3 q& zProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大) }; D" v) v7 |/ W
9 M2 a4 b- m6 [9 h( I
/* create a default heap */+ L. p& K! H5 S* `" J$ B
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
2 s" P* e/ Y& c) T  n/ hvar heapMemParams = new HeapMem.Params();
) f' A# F8 I. C8 dheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
7 t; P  d* v$ i7 x* r
, _( x9 @) J' R
var Memory = xdc.useModule('xdc.runtime.Memory');# I) ?1 Z6 M9 _' t1 E
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
) a3 ?5 R, u- I' h( u: I5 E4 E3 m
( |) S/ j, N% a9 P5 d+ N- B/* configure System module */+ C2 }/ R# g/ r2 F" a' D! J
var SysMin = xdc.useModule('xdc.runtime.SysMin');: `! C+ t4 T) V' ?7 ^
SysMin.bufSize = 0x1000;2 g: Q8 _1 y; n, ]& W$ V7 y0 C
SysMin.flushAtExit = false;6 Y9 Q' S9 b0 t& c- b- X
# v3 @4 @3 Q$ v  M; C+ `" x
var System = xdc.useModule('xdc.runtime.System');: j" S3 }. m/ F# F6 w! F
System.SupportProxy = SysMin;# h+ O8 J4 F8 G% ?

0 H# b$ l  T) c' ]4 X0 T  h( q+ f/* configure SysBios to use the lower half of Timer 1 */
1 w% ]1 n, U2 Z" g$ P+ Mvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
4 \# B2 [" H( b. v2 c# u* t- pvar Clock = xdc.useModule('ti.sysbios.knl.Clock');: P: I' L2 k( ^  p4 B9 L7 S. m: X& [
Timer.timerSettings[1].master = true;
: `! M7 ?- H& r% A! w( x- @6 VTimer.defaultHalf = Timer.Half_LOWER;8 X* L3 U/ [  o7 @& Z0 @) `( ~' I
Clock.timerId = 1;
, z6 s9 {) o. G1 T7 R4 E3 M  r3 `+ }* f: k' r& k7 l

9 _8 I8 ~# O  n/*
0 ~- T% z6 b1 |5 o9 h *  ======== Miscellaneous Configuration ========7 C3 R. f& l! ~) k2 J
*/
# o: M$ w; y6 q1 }! Q% i% q7 Y2 ?8 w8 e
/* set default diags mask */) ?1 o5 m% [- Q/ w/ u/ g6 i# v
var Diags = xdc.useModule('xdc.runtime.Diags');
0 p5 t' q& q# m* y- V6 b) m9 \9 bvar Defaults = xdc.useModule('xdc.runtime.Defaults');5 P! E  {1 i/ C7 X5 E
% @0 ^( I0 P- B6 m( l3 t  ^) S
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;  W; u6 y6 M- W% c
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
/ H  u8 I0 q2 W+ T2 N0 r* hDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;9 [1 `. c6 W) l1 j  X" g0 W
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */' y# h; {5 B6 ~
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */7 o- x! F+ k+ _, ^0 m4 m
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;. j, q/ X* v* j  c- \; V
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;1 u! b  S/ n/ V. s
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
4 _+ k: {1 E6 d: |) I- q) ?2 GDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;# i2 `$ p) t7 ^* \
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
' k# m( g' l( K# C# _" c3 fDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;/ A2 X: y2 K, R" ^- m6 H! N2 t
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;' B$ I5 B, n# X3 }! \1 }. g& v5 l
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;  A- b* G7 l; ~# |  P
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;% N$ G8 b% m+ q0 X" O4 x
9 a4 `) i5 A, B/ }; O
/* override diags mask for selected modules */
; b7 R9 w! l) J4 h  Cxdc.useModule('xdc.runtime.Main');/ {( T/ @" E, {1 {
Diags.setMaskMeta(
0 a; E6 R8 P$ \2 |    "xdc.runtime.Main",
# s* H( _1 z4 U; Z$ O( s. m    Diags.ENTRY | Diags.EXIT | Diags.INFO,2 n& _: A: U8 L& I+ s# U
    Diags.RUNTIME_ON
9 P, g1 @/ v( n);' ?' Z( k+ }. [6 ^, L; ?& j

5 ^% H7 _, E' tvar Registry = xdc.useModule('xdc.runtime.Registry');+ h/ P) F; S$ u. W0 Y
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
+ ~( K& w. {# ]% w% {; D/ ^Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;- G' E6 W/ t0 w' W5 {! y* y
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;1 W% Y. g; C9 S$ A* Q0 d2 X
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
/ H, J! Q  ?- H$ e2 E, h; f9 X# L7 ]
/* create a logger instance */5 O! f# _3 t8 e$ e) S8 w/ j3 j
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
; F7 O* A% |& {. N9 r- K. mvar loggerBufP = new LoggerBuf.Params();2 n" M1 A# y# |' ^, X( D( @
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
. r$ o" k- |$ sloggerBufP.bufType = LoggerBuf.BufType_FIXED;
' Z4 [" b) |: I
( @7 f3 }2 {1 u1 {/ B0 w4 n3 z: ]var appLogger = LoggerBuf.create(loggerBufP);
  j3 s  X5 Q' A% \2 q3 q4 E. A- XappLogger.instance.name = "AppLog_Core1";
; z7 O, O: d# Y7 o8 ]  |: n' UDefaults.common$.logger = appLogger;
+ }4 E7 u+ P9 J% oMemory.defaultHeapSize = 0x8192;   
  {9 Q$ b4 ?9 EIdle.idleFxns[0] = "&LEDStatus";# R3 J( n: b$ e
Cache.initSize.l2Size = Cache.L2Size_32K;
" R# t" g. O' r0 `0 [6 m, I1 W5 {& L: z( w$ k2 E6 H3 ]% g
回复 支持 反对

使用道具 举报

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 */9 @+ ?8 m1 P% T7 p! _0 S
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
' \* d9 }6 J7 H0 ^var heapMemParams = new HeapMem.Params();
3 h! F6 c) x1 O* d3 BheapMemParams.size = 0x4000;
; j; V8 n# G/ A3 @0 A, q8 o! }, m  a9 Y7 k
var Memory = xdc.useModule('xdc.runtime.Memory');
' a6 K& P& f0 |$ cMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
1 R* q' P5 U+ `' z: }, t6 Z
$ f) l, V! N+ f. L8 Y2 p; q我大约calloc  每次共计大小为5K*16bits,2 r* z8 z- `4 P; ?7 T( a
而默认配置才0x4000、需要改大。
2 {9 T! _3 a" c( p' n% v7 t  T5 |: s7 J( s$ L+ v( c# Y
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
" I4 H  s* b) `# J; X6 {Program.heap = 0;
* p6 N/ ~6 Y+ T, v1 S& Y0 P9 PProgram.argSize = 100;  /* minimum size */0 y. T( ~8 o% v  E0 w; M! y
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-27 14:36 , Processed in 0.043485 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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