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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
# R8 N/ \4 n  m0 C. e4 d8 C! ^
& Q/ ^" D! {7 D/ ~9 o; a    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
  m1 M2 D7 J0 F$ q
* \- d6 y: P0 S其他程序段。。。。。# F" g8 R' _" a$ X6 I9 g) @4 L' a9 w+ j
2 M! d3 B. o) b0 g
   free(x_d);& S) K+ m, K* X) Q2 I4 R

/ W1 M8 N  R3 Q/ a使用DSP侧单独调试功能,验证动态申请没有问题,; |4 V# v* \' b# s: p
6 B- _3 N  n2 X. {& b
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。( b/ T* R( Q5 T- t; S

: k( H6 |( O6 h# Z# _3 J! P7 C9 s; f  q4 @4 Q
7 [0 n7 s8 v8 c
2 E; ~+ e  F# D6 g" R1 x2 u
4 C: N- i6 _9 [
) ^( k# t$ J: @$ F+ h: W
% y3 K0 ~0 J" u' a( s1 K& W

6 F' e% Z7 M6 P8 r$ v+ O, U) b7 l/ r( ?7 a
5 J. E$ n# P' r9 x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明  M0 L2 }/ N' O
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下' o; x6 a8 ~( k
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)$ s% ~, i  i* T

( z$ Y& U1 y* D  |. {  ^是不是需要在DSP.CFG中进行配置
- m* M/ E& \! d# t) y我现在的配置为
" G/ o, Q+ ^0 t( I
0 X& I' l. P$ s/*9 b5 a5 ^! L7 p% q) a
*  ======== Operating System Configuration ========/ R( Z/ ^. s5 X. M
*/' d* p( U! U% X! f' a4 \0 {1 r

5 Z) c  b  l% [4 i/* no rts heap */
2 h/ }4 ~4 @$ b& vProgram.heap = 0;
2 Y3 |7 M- S2 K5 EProgram.argSize = 100;  /* minimum size */; Y5 l  J+ Z8 l* D& ]
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大2 A9 Z; R) \# {8 T+ j4 n
1 \" L! o' G& X& K0 j
/* create a default heap *// [0 h: m  i# a
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');: U( p; B7 T' n
var heapMemParams = new HeapMem.Params();  w9 Q" R5 O6 ?" {; |) g' y, @
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
& s9 [& b/ T) r' Q8 P: _7 u4 M- s1 ^+ k, r  A% s% @0 s
var Memory = xdc.useModule('xdc.runtime.Memory');3 g4 S. R7 V7 i; j" q
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);; T  q$ \3 @& P% Z# X$ p

  v/ `9 F, [7 K/ C$ C/* configure System module */& c0 R: i! S6 h$ z
var SysMin = xdc.useModule('xdc.runtime.SysMin');' Z! B7 w$ @; O  n. k6 C
SysMin.bufSize = 0x1000;
% C1 t# h. b' J: C4 ]7 `6 ^SysMin.flushAtExit = false;
7 {$ e2 d( D( M2 s! d( _
7 x. t) c- c4 b" Z8 [var System = xdc.useModule('xdc.runtime.System');
% k) |# T0 [8 Z6 \% Q) o1 {System.SupportProxy = SysMin;5 p7 b% T  E/ W* `" W
+ S2 X2 q2 a1 n
/* configure SysBios to use the lower half of Timer 1 */) Y1 v! \! _8 O8 s8 ~6 u8 g9 X8 E
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');8 }& G! f5 i  P5 H6 g* ^8 r0 p) k
var Clock = xdc.useModule('ti.sysbios.knl.Clock');  R2 _& O8 _. ~* H9 a; k
Timer.timerSettings[1].master = true;
. o' ^5 }' A6 a- HTimer.defaultHalf = Timer.Half_LOWER;
9 k6 E0 X$ t) ~/ ], pClock.timerId = 1;/ ~" c) p) f8 k/ |+ h$ Y* m& x0 H# {

$ @) `; x! K, Y: t% b4 s$ U2 O
) C; H' U6 ^6 _- Y/*
2 Y2 }( W, d- ~1 I( \1 M! _; ]4 T0 P *  ======== Miscellaneous Configuration ========
" }& x4 D" Z( \3 \9 W: M& u# C */; t/ d' I) y2 ^$ W

  ~) g$ m: |5 K, {/* set default diags mask *// [9 p8 e1 o: B9 c0 A8 C
var Diags = xdc.useModule('xdc.runtime.Diags');
$ l$ ?" W$ [( p3 ~, s+ O: m5 Nvar Defaults = xdc.useModule('xdc.runtime.Defaults');" e/ N3 U0 o6 X! a, l
' A: g" y, H- i7 |+ y6 [$ O
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
* n9 j- R+ r+ I; ^2 N" ZDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;& u* O3 P1 \4 \0 J$ Z. L0 ^
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
! w) w% Y+ v( K7 xDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */0 f' I6 R! F* S( z! f8 K
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
9 e% n+ \7 T5 z# x/ q* D6 G+ B0 QDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
) m  K1 m) W5 w- }8 l2 c7 P" hDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;2 C0 e' X8 Z* V' {9 X1 [+ l
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;& o, H* g; {; P- J6 V
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;9 [3 ~( R' V2 x& \
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;3 R9 R  ?1 C  \5 a2 E
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;; Z$ F- |, e& o. }2 x6 |0 C' g, x) v
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
' _7 y5 L- k, P" r3 t- jDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;( O+ c# z; i" L0 o8 z& X2 o
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;2 c, A3 n/ L( e9 G* R0 }/ P: [" ?
) b1 Q4 e$ D" b/ A
/* override diags mask for selected modules */( y. q: G. X' |( l) L# J3 ]
xdc.useModule('xdc.runtime.Main');5 h) H% ^  ^' ~  t2 E  p- h; P
Diags.setMaskMeta(
2 P0 A3 x7 B  P) \    "xdc.runtime.Main",
! l* L6 ]* G, C, Q; T% Q# |    Diags.ENTRY | Diags.EXIT | Diags.INFO,
* f5 _6 a7 c. h8 `    Diags.RUNTIME_ON$ t& e! t0 Y. Z+ }! C
);9 I- k6 ^! g0 i/ V( x2 _2 {

1 A5 s7 i5 T( T6 H1 c1 _" [: Uvar Registry = xdc.useModule('xdc.runtime.Registry');
3 z  ^$ _2 Y9 B1 n3 M7 s: V- S! ?Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
+ C* o4 I' E5 ]! G1 ZRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;! W+ \: A6 u1 f' O. L7 @
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
6 A% P1 `. q' C2 N$ `* q+ z9 qRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;+ B. i' c# G" R, L/ [: v: @& }
9 P" U' ?! l7 y' d7 f
/* create a logger instance */
0 Z. }0 p' n$ e2 lvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');8 s8 K; G) g& l" J
var loggerBufP = new LoggerBuf.Params();
6 D1 D. c2 d5 d0 L  x3 [loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */% p  b# t5 `/ F
loggerBufP.bufType = LoggerBuf.BufType_FIXED;) N: ^0 E5 W" f, ]7 d
' A/ s% `% V/ S; h: J% h" K; J  i
var appLogger = LoggerBuf.create(loggerBufP);7 k' w+ l' B; v: ]" p2 ^) P
appLogger.instance.name = "AppLog_Core1";4 ^0 ?5 B) c5 n: q0 Z. p
Defaults.common$.logger = appLogger;9 \- u2 O5 a% h9 A0 c9 C% {& x; S
Memory.defaultHeapSize = 0x8192;   
& h' D  l1 j5 ~( x. M. `& u! oIdle.idleFxns[0] = "&LEDStatus";
8 r$ B& {8 [, u# SCache.initSize.l2Size = Cache.L2Size_32K;. _2 e3 `' d" B! B& A1 {
  i) ]( i* ~8 @5 D4 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 */. y! q5 I. ]) c
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');: c1 V* R& x8 x% _
var heapMemParams = new HeapMem.Params();+ R* s* l1 Z! g1 y* e3 e" X
heapMemParams.size = 0x4000;4 P$ s  H4 P% F* X
8 w/ I& f/ n. t
var Memory = xdc.useModule('xdc.runtime.Memory');, J4 V% a6 k% D0 j9 r
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
% i! E% S6 E: g) E4 M; x$ e' a
我大约calloc  每次共计大小为5K*16bits,6 Y* c7 w' [4 J* U
而默认配置才0x4000、需要改大。
! ~4 c  K6 J" l, j
% X1 t1 i' M3 Z, L0 @1 R" L1 Y
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */7 q7 G) P$ Q/ x- ^4 m3 h* ^
Program.heap = 0;+ j2 _. X2 H2 o1 X  s
Program.argSize = 100;  /* minimum size */
: U/ O4 b4 U2 y. RProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-28 10:01 , Processed in 0.062731 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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